home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / net / k20menus.lzh / k20exec.c next >
C/C++ Source or Header  |  1994-10-12  |  7KB  |  312 lines

  1. /*    Copyright 1992 H.Ogasawara (COR.)    */
  2. #include    <corlib.h>
  3. #include    "k20menu.h"
  4.  
  5. int            optins= FALSE;
  6. int            attr= 9;
  7. extern int        total;
  8. extern NET_MENU        *top;
  9. extern unsigned char    **lp;
  10. extern int        font;
  11. extern int        autoexit,
  12.             ncflag;
  13. extern WindowID        Awp, Bwp;
  14. extern NET_MENU        nnt;
  15. extern char        k20[];
  16. extern short        dspmode;
  17.  
  18. extern unsigned char    NetMenuFile[],
  19.             NetLogFile[];
  20. unsigned char        Yankbuf[512]= {0};
  21.  
  22.  
  23. short        Cur= 0;
  24. /*static short    StRev= FALSE,
  25.         StPos;*/
  26.  
  27. #define    RevLineON(a)    (StRev=TRUE,StPos=(a),RevLine(a))
  28. #define    RevLineOFF(a)    (StRev=FALSE,RevLine(a))
  29.  
  30. CurDraw( dbuf, pos )
  31. DrawBuf    *dbuf;
  32. {
  33.     if( ncflag )
  34.         DrawSetLine( dbuf, 0,-1,0,-1, (attr&3), OptionLine );
  35.     else{
  36.         pos+= 3;
  37.         DrawSetLine( dbuf, 0,pos*font-4,35*font,pos*font,
  38.                     (attr&3)|OptionXor, OptionFill );
  39.     }
  40. }
  41.  
  42. RevLine( pos )
  43. {
  44.     DrawBuf    dbuf[1];
  45.     pos+= 2;
  46.     DrawSetLine( dbuf, 0,pos*font,35*font,pos*font+font-1,
  47.                     (attr&3)|OptionXor, OptionFill );
  48.     WindowDraw( Bwp, dbuf, 1 );
  49. }
  50.  
  51. EventExecB( wp, info )
  52. WindowID    wp;
  53. EventInfo    *info;
  54. {
  55.     DrawBuf    dbuf[80];
  56.     switch( info->option ){
  57.     case EventOpen:
  58.         return    TRUE;
  59.     case EventClose:
  60.         Bwp= NULL;
  61.         WindowClose( wp );
  62.         return    TRUE;
  63.     case EventRedraw: {
  64.             short    i;
  65.             DrawBuf    *dp= dbuf;
  66.             DrawSetClear( dp++, attr&AttrReverse?attr&3:0 );
  67.             DrawSetSymbol( dp++, 0, 0, lp[0], attr^AttrReverse, font );
  68.             DrawSetSymbol( dp++, 0,font, lp[1], attr|4, font );
  69.             for( i= 2 ; i< total ; i++ )
  70.                 DrawSetSymbol(dp++,0,i*font,lp[i],attr,font);
  71.             CurDraw( dp++, Cur );
  72.             WindowDraw( wp, dbuf, dp-dbuf );
  73. /*            if( StRev )
  74.                 RevLine(StPos);*/
  75.         }
  76.         return    TRUE;
  77.     case EventMouseSwitch:
  78.         if( info->LeftON ){
  79.             if( (info->ShiftStat & 4) &&
  80.                 (info->y < font*2 || info->x >= font) )
  81.                 SetClipBoard( wp, info, lp, total+1, FALSE, font );
  82.             else if( info->y >= font*2 && info->x >= font ){
  83.                 int        i= info->y/font-2;
  84.                 NET_MENU    *net= (NET_MENU*)net_count(i);
  85.                 if( !net )
  86.                     return    TRUE;
  87.                 if( info->x < font*(24/2) ){
  88.                     RevLine( i );
  89.                     SendData( wp, info, UserString, net->name );
  90.                     RevLine( i );
  91.                 }else if( info->x >= font*(52/2) ){
  92.                     RevLine( i );
  93.                     SendData( wp, info, UserString, net->line );
  94.                     RevLine( i );
  95.                 }else{
  96.                     RevLine( i );
  97.                     SendData( wp, info, UserString, lp[i+2] );
  98.                     RevLine( i );
  99.                 }
  100.             }else if( info->y >= font*2 && info->x < font )
  101.                 a_dial( info->y/font -2 );
  102.         }else if( info->y >= font*2 && info->RightON ){
  103.             int        i= info->y/font-2;
  104.             p_menu( i );
  105.         }
  106.         return    TRUE;
  107.     }
  108.     return    FALSE;
  109. }
  110.  
  111. ReRead()
  112. {
  113. /*    DrawBuf    dbuf[1];*/
  114.     int    h, v;
  115.     if( Bwp )
  116.         WindowClose( Bwp );
  117. /*    DrawSetClear( dbuf, 1 );
  118.     WindowDraw( Awp, dbuf, 1 );*/
  119.     read_net( NetMenuFile );
  120.     log_count( NetLogFile );
  121.     make_line( top, lp );
  122.     WindowGetViewSize( Awp, &h, &v );
  123.     Bwp= WindowScrollOpen( 0, 0, h, v, Awp, font*70/2,
  124.     total*font, DirectionY|DirectionX, 16, font*2, EventExecB );
  125.     WindowRedraw( Awp );
  126. }
  127.  
  128. EventExecA( wp, info )
  129. WindowID    wp;
  130. EventInfo    *info;
  131. {
  132.     DrawBuf    dbuf[2];
  133.     switch( info->option ){
  134.     case EventOpen:
  135.         read_net( NetMenuFile );
  136.         log_count( NetLogFile );
  137.         make_line( top, lp );
  138.         Bwp= WindowScrollOpen( 0, 0, info->h, info->v, wp, font*70/2,
  139.         total*font, DirectionY|DirectionX, 16, font*2, EventExecB );
  140.         WindowRedraw( Awp= wp );
  141.         return    TRUE;
  142.     case EventClose:
  143.         WindowClose( wp );
  144.         WindowConnectionClose();
  145.         return    TRUE;
  146.     case EventRedraw: {
  147.         int    x, y;
  148.         WindowGetViewSize( wp, &x, &y );
  149.         DrawSetLine( dbuf, x-12, y-12, x-1, y-1, 1, OptionFill );
  150.         WindowDraw( wp, dbuf, 1 );
  151.         if( Bwp )
  152.             WindowSendEvent( Bwp, info );
  153.         }
  154.         return    TRUE;
  155.     case EventResize:
  156.         WindowResize( Bwp, 0, 0, info->h, info->v );
  157.         WindowResize( wp, info->x, info->y, info->h, info->v );
  158.         return    TRUE;
  159.     case EventMouseSwitch:{
  160.         int    x, y;
  161.         WindowGetViewSize( wp, &x, &y );
  162.         if( info->LeftON && info->x > x-10 && info->x <= x &&
  163.                     info->y > y-10 && info->y <= y )
  164.             WindowResizeOperation( wp, info );
  165.         else
  166.             WindowSendEvent( Bwp, info );
  167.         }
  168.         return    TRUE;
  169.     case EventKey: {
  170.         short    old= Cur;
  171.         int    x, y, hy, i;
  172.         WindowGetViewSize( Bwp, &x, &y );
  173.         WindowGetHome( Bwp, &x, &hy );
  174.         if( (i= (Cur+1)*font) < hy )
  175.             WindowScroll( Bwp, 0, -(hy-i+font) );
  176.         else if( (i= (Cur+4)*font) > y+hy )
  177.             WindowScroll( Bwp, 0, (i-(y+hy)+font) );
  178.         switch( info->KeyCode ){
  179.         case '<':
  180.         case FuncKeyRollDown:
  181.         case FuncKey+1:
  182.             WindowScroll( Bwp, 0, -80*24 );
  183.             Cur= 0;
  184.             break;
  185.         case 'G':
  186.         case '>':
  187.         case FuncKeyRollUp:
  188.         case FuncKey+2:
  189.             WindowScroll( Bwp, 0, 80*24 );
  190.             Cur= total-3;
  191.             break;
  192.         case FuncKeyLeft:
  193.         case 'h':
  194.         case Ctrl('f'):
  195.             WindowScroll( Bwp, -16, 0 );
  196.             return    TRUE;
  197.         case FuncKeyRight:
  198.         case 'l':
  199.         case Ctrl('b'):
  200.         case Ctrl('a'):
  201.             WindowScroll( Bwp, 16, 0 );
  202.             return    TRUE;
  203.         case FuncKeyDown:
  204.         case 'j':
  205.         case Ctrl('n'):
  206.         case Ctrl('x'):
  207.             if( ++Cur >= total-2 )
  208.                 Cur= total-3;
  209.             break;
  210.         case FuncKeyUp:
  211.         case 'k':
  212.         case Ctrl('p'):
  213.         case Ctrl('e'):
  214.             if( --Cur < 0 )
  215.                 Cur= 0;
  216.             break;
  217.         case Ctrl('q'):
  218.             WindowSendSignal( WindowProcessID, SignalKill, NULL );
  219.             return    TRUE;
  220.         case 'v':
  221.         case FuncKeyUnDo:
  222.         case FuncKey+6:
  223.             log_view( Cur, TRUE );
  224.             return    TRUE;
  225.         case 'V':
  226.         case FuncKeyDel:
  227.         case FuncKey+7:
  228.             log_view( Cur, FALSE );
  229.             return    TRUE;
  230.         case FuncKey+8:
  231.         case 'E':
  232.             log_edit( Cur );
  233.             return    TRUE;
  234.         case FuncKey+19:
  235.             if( *Yankbuf ){
  236.             NET_MENU    *net= (NET_MENU*)net_count( Cur );
  237.             ConsoleOpen();
  238.             ConsolePrint( "k20menu:行挿入中\r\n" );
  239.             optins= TRUE;
  240.             add_netlist( Yankbuf, net->key );
  241.             optins= FALSE;
  242.             ReRead();
  243.             ConsolePrint( "k20menu:正常終了\r\n" );
  244.             }
  245.             return    TRUE;
  246.         case FuncKey+18:{
  247.             NET_MENU    *net= (NET_MENU*)net_count( Cur );
  248.             char        *p;
  249.             ConsoleOpen();
  250.             ConsolePrint( "k20menu:行削除中\r\n" );
  251.             p= (char*)astrcpy( Yankbuf, net->line );
  252.             if( p[-2] == '\n' )
  253.                 p[-2]= '\0';
  254.             add_netlist( "", net->key );
  255.             ReRead();
  256.             ConsolePrint( "k20menu:正常終了\r\n" );
  257.             return    TRUE;
  258.             }
  259.         case FuncKey+16: {
  260.             NET_MENU    *net= (NET_MENU*)net_count( Cur );
  261.             if( net )
  262.                 OpenDiag( info->x, info->y, net->line );
  263.             return    TRUE;
  264.             }
  265.         case FuncKey+15:
  266.             OpenDiag( info->x, info->y, "" );
  267.             return    TRUE;
  268.         case Ctrl('u'):
  269.         case Ctrl('s'):
  270.         case FuncKey+4:
  271.         case FuncKeyHome:
  272.             dspmode= (dspmode+1)%6;
  273.             goto    setdisp;
  274.         case Ctrl('d'):
  275.         case FuncKey+3:
  276.             dspmode= (dspmode+5)%6;
  277. #if 0
  278.             goto    setdisp;
  279.         case FuncKey+3:
  280.         case FuncKey+4:
  281.         case FuncKey+5:
  282.         case FuncKey+6:
  283.         case FuncKey+7:
  284.         case FuncKey+8:
  285.             dspmode= info->KeyCode-(FuncKey+3);
  286. #endif
  287.         setdisp:
  288.             make_line( top, lp );
  289.             WindowRedraw( wp );
  290.             return    TRUE;
  291.         case ' ':
  292.         case Ctrl('m'):
  293.         case Ctrl('j'):
  294.             a_dial( Cur );
  295.         default:
  296.             return    TRUE;
  297.         }
  298.         if( old == Cur )
  299.             break;
  300.         CurDraw( dbuf, old );
  301.         CurDraw( dbuf+1, Cur );
  302.         WindowDraw( Bwp, dbuf, 2 );
  303.         }
  304.         return    TRUE;
  305.     case EventIconify:
  306.         IconEnt( wp, "DialMenu", AttrDefault, 12 );
  307.         return    TRUE;
  308.     }
  309.     return    FALSE;
  310. }
  311.  
  312.